The use of “cloud computing,” in which a single computer system (which itself may be made up of many different processors, memory resources, and/or nonvolatile storage resources) hosts a large number of “virtual machines” has become increasingly popular recently. Such environments provide on-demand scalability, increased reliability, and decreased capital costs for users, who no longer are forced to purchase dedicated hardware on which to run their applications. An example of such a cloud computing environment is Amazon Web Services™.
In a typical cloud computing scenario, a customer will install an operating system, any necessary middleware, and one or more applications onto a virtual machine in the cloud computing environment. This virtual machine (which essentially comprises an allocated subset of the cloud's processing, memory, and/or nonvolatile storage resources) typically appears to the operating system and applications as dedicated hardware (an “actual machine”). One benefit of the cloud computing paradigm is that this software configuration can be saved as “machine image,” which can be stored as a backup, etc.
More recently, as an enhancement to their customer offerings, several cloud computing providers have begun to offer machine images that are preconfigured with specified software, to eliminate the need for customers to perform their own software installations on their virtual machines. One example of such preconfigured offerings are the Amazon Machine Images™ that are configured to run on Amazon Web Services™. Using this technology, customers can select a machine image that is preconfigured with the software they need, pay any necessary license fees for the software, and have a configured software installation ready to use in fairly short order. To date, however, there are few, if any, acceptable tools for managing virtual machines in such environments. Typically, a customer will have to undertake a process of searching and guesswork to identify a machine image that will suit his or her needs.
The cloud computing paradigm is particularly well-suited to providing software for demonstration and/or testing purposes. For example, many software companies create demonstration installations of enterprise software packages, in order to demonstrate features that might be of particular advantage to a particular customer. Similarly, many software developers have a need to test applications under development under a wide variety of operating systems and configurations, and the information technology departments of companies typically prefer to install new software into a test environment before installing it in a production environment. Many users do not have the financial resources to purchase dedicated hardware for demonstration or testing uses, however, and such uses are typically transitory in nature, so that even customers who might have the resources to purchase dedicated hardware for such uses find that such a purchase. A problem with the use of virtual machines for testing or demonstration, however, is that users often like to run their production systems on dedicated hardware. Accordingly, if a user is satisfied with a tested or demonstrated configuration, the user typically has to duplicate the installation process on an actual computer system operated by that user. This process can be frustrating, as configuration of complex applications is typically an expensive and time-consuming process.